The pervasiveness of microprocessor-controlled equipment has led to ever more capable devices, but it also places more reliance on the quality of the software that controls these embedded systems. Many potentially dangerous pieces of equipment are controlled by embedded software (e.g., cars, trains, airplanes, oil refineries, chemical processing plants, nuclear power plants, and medical devices, etc.). Conventional approaches to verifying the correctness of operational application code for these devices and systems are difficult and inefficient.
Safety-critical software systems development addresses the increase in size and complexity of these systems, and respects the need to maintain safety-critical operations. There are a range of software engineering methods, tools, and frameworks to develop complex, critical systems. For example, one method is applying model-driven engineering techniques to safety-critical systems development.
Conventional approaches can include the use of commercially-available integrated design environment (IDE) tools to perform software specification modeling, validation/verification, and test case generation and execution. Typically these tools use rigorous methods to automate or semi-automate a portion of the detailed design steps, while reducing data entry requirements to save time with the remaining steps.